/**
 * @classdesc 扫描器
 * @author ydx
 */
class Scanner {
    constructor(templateStr) {
        //我买了一个{{thing}}手机，好{{mood}}啊
        this.templateStr = templateStr;
        //指针，初始扫描位置
        this.pos = 0;
        //扫描完成剩余的字符串
        this.tail = this.templateStr.substring(this.pos);
    }

    /**
     * 扫描指定内容
     * @description 无返回值
     */
    scan(tag) {
        if (this.tail.indexOf(tag) == 0) {
            //指针后移tag长度
            this.pos += tag.length;
            this.tail = this.templateStr.substring(this.pos);
        }
    }

    /**
     * 
     * @param {*} stopTag 
     * @description 让指针进行扫描，遇到指定内容结束，返回扫描过的文字
     */
    scanUtil(stopTag) {
        //开始扫描的位置
        const pos_backup = this.pos;
        //扫描位置不能超过字符串长度
        while (!this.eos() && this.tail.indexOf(stopTag) != 0) {
            this.pos++;
            //扫描完成剩余的字符串
            this.tail = this.templateStr.substring(this.pos);
        }
        //返回扫描过的文字
        return this.templateStr.substring(pos_backup, this.pos);
    }

    /**
     * 是否遍历完成templateStr
     * @returns {boolean}
     */
    eos() {
        return this.pos >= this.templateStr.length;
    }

}

export default Scanner;